// 导入数据库操作模块
const db = require("../db/index");

// 导入密码加密模块
const bcrypt = require("bcryptjs");

// 用这个包来生成 Token 字符串
const jwt = require("jsonwebtoken");

// 导入配置文件
const config = require("../config");

//注册用户的处理函数
exports.regUser = (req, res) => {
  // 获取客户端表单的数据
  const userinfo = req.body;
  // if (!userinfo.username || !userinfo.password) {
  //   // return res.send({ status: 1, message: "用户名或密码不能为空 !" });
  //   return res.cc("用户名或密码不能为空 !");
  // }

  // 定义 sql语句 ,查询用户名是否被占用
  const sqlStr = "select * from ev_users where username=?";
  db.query(sqlStr, userinfo.username, (err, results) => {
    // if (err) return res.send({ status: 1, message: err.message });
    if (err) return res.cc(err);
    if (results.length > 0)
      //   return res.send({ status: 1, message: "用户名已被占用,请更换用户名!" });
      return res.cc("用户名已被占用,请更换用户名!");
    // 对密码进行  加密处理
    userinfo.password = bcrypt.hashSync(userinfo.password, 12);
    // 定义  sql语句  插入数据
    const sql = "insert into ev_users set ?";
    db.query(
      sql,
      { username: userinfo.username, password: userinfo.password },
      (err, results) => {
        // if (err) return res.send({ status: 1, message: err.message });
        if (err) return res.cc(err);
        if (results.affectedRows !== 1)
          //   return res.send({ status: 1, message: "注册用户失败，请稍后再试！" });
          return res.cc("注册用户失败，请稍后再试！");
        res.cc("注册成功 !", 0);
      }
    );
  });
};

// 注册登录的处理函数
exports.login = (req, res) => {
  const userinfo = req.body;
  const sql = `select * from ev_users where username=?`;
  db.query(sql, userinfo.username, (err, results) => {
    // console.log(results);
    if (err) return res.cc(err);
    if (results.length !== 1) return res.cc("登录失败！");
    const compareResult = bcrypt.compareSync(
      userinfo.password,
      results[0].password
    );
    if (!compareResult) return res.cc("登录失败! ");
    // 剔除完毕之后，user 中只保留了用户的 id, username, nickname, email 这四个属性的值
    const user = { ...results[0], password: "", user_pic: "" };
    // 生成 Token 字符串
    const tokenStr = jwt.sign(user, config.jwtSecretKey, {
      expiresIn: "10h", // token 有效期为 10 个小时
    });
    res.send({
      status: 0,
      message: "登录成功！",
      // 为了方便客户端使用 Token，在服务器端直接拼接上 Bearer 的前缀
      token: "Bearer " + tokenStr,
    });
  });
};
